Setup

Objects and Classes

[1] 1 2 3
[1] "a"
$one
[1] 1 2 3

$two
[1] "a"
List of 2
 $ one: int [1:3] 1 2 3
 $ two: chr "a"
[1] "character"

Data Structures

Vectors form the basis of R data structures. Two main types are atomic and lists

$a
[1] 1

$b
[1] 2

Data frames

Data frames are a special kind of list, and probably the most commonly used for data science purposes.

[1] "data.frame"

Importing Data

Working with Databases

Selecting Columns

Filtering Rows

Generating new data

Renaming columns

 [1] "EMPLID"                   "LIBUSER"                  "GENDER"                  
 [4] "RACE"                     "AGE"                      "TURNDOWN"                
 [7] "SUBMISSION"               "ACTIVEAWD"                "AWARD_HOME_DEPT"         
[10] "AWARD_CURRENT_STATE"      "AWARD_PROJECT_START_DATE" "AWARD_PROJECT_END_DATE"  
[13] "AWARD_TOTAL_AMOUNT"       "AGE_STD"                 

Merging

Joining, by = "EMPLID"
Column `EMPLID` joining factors with different levels, coercing to character vector
Joining, by = "EMPLID"
Column `EMPLID` joining factors with different levels, coercing to character vector

Exercises

Selecting and filtering

Generating new data

Python examples

Using Python for data science is not far removed from R

Python’s main data processing module is pandas

Import

                                              EMPLID         ...          award_total_amount
0  d613cf396403a94490de24a13296ef239df8574bb7eb5c...         ...                         NaN
1  d613cf396403a94490de24a13296ef239df8574bb7eb5c...         ...                         NaN
2  d613cf396403a94490de24a13296ef239df8574bb7eb5c...         ...                         NaN
3  d613cf396403a94490de24a13296ef239df8574bb7eb5c...         ...                         NaN
4  d613cf396403a94490de24a13296ef239df8574bb7eb5c...         ...                         NaN

[5 rows x 13 columns]

Selecting Columns

              age  award_total_amount
0             NaN                 NaN
1             NaN                 NaN
2             NaN                 NaN
3             NaN                 NaN
4             NaN                 NaN
5             NaN                 NaN
6             NaN                 NaN
7             NaN                 NaN
8             NaN                 NaN
9             NaN                 NaN
10            NaN                 NaN
11            NaN                 NaN
12            NaN                 NaN
13            NaN                 NaN
14            NaN                 NaN
15            NaN                 NaN
16            NaN                 NaN
17            NaN                 NaN
18            NaN                 NaN
19            NaN                 NaN
20            NaN                 NaN
21            NaN                 NaN
22            NaN                 NaN
23            NaN                 NaN
24            NaN                 NaN
25            NaN                 NaN
26            NaN                 NaN
27            NaN                 NaN
28            NaN                 NaN
29            NaN                 NaN
...           ...                 ...
131984  66.000000                 NaN
131985  66.000000              3631.0
131986  66.000000                 NaN
131987  66.000000                 NaN
131988  66.000000            303559.0
131989  66.000000            152929.0
131990  66.000000                 NaN
131991  66.000000            168631.0
131992  66.000000            125000.0
131993  49.400002                 NaN
131994  49.400002                 0.0
131995  56.099998                 NaN
131996  56.099998                 NaN
131997  56.099998                 NaN
131998        NaN              5582.0
131999        NaN                 NaN
132000        NaN                 NaN
132001        NaN                 NaN
132002        NaN                 NaN
132003        NaN                 NaN
132004        NaN                 NaN
132005        NaN                 NaN
132006        NaN                 NaN
132007        NaN                 NaN
132008        NaN                 NaN
132009        NaN            219715.0
132010        NaN                 NaN
132011        NaN                 NaN
132012        NaN                 NaN
132013        NaN                 NaN

[132014 rows x 2 columns]
        libuser gender   race        age
0             1    NaN    NaN        NaN
1             1    NaN    NaN        NaN
2             1    NaN    NaN        NaN
3             1    NaN    NaN        NaN
4             1    NaN    NaN        NaN
5             1    NaN    NaN        NaN
6             1    NaN    NaN        NaN
7             1    NaN    NaN        NaN
8             1    NaN    NaN        NaN
9             1    NaN    NaN        NaN
10            1    NaN    NaN        NaN
11            1    NaN    NaN        NaN
12            1    NaN    NaN        NaN
13            1    NaN    NaN        NaN
14            1    NaN    NaN        NaN
15            1    NaN    NaN        NaN
16            1    NaN    NaN        NaN
17            1    NaN    NaN        NaN
18            1    NaN    NaN        NaN
19            1    NaN    NaN        NaN
20            1    NaN    NaN        NaN
21            1    NaN    NaN        NaN
22            1    NaN    NaN        NaN
23            1    NaN    NaN        NaN
24            1    NaN    NaN        NaN
25            1    NaN    NaN        NaN
26            1    NaN    NaN        NaN
27            1    NaN    NaN        NaN
28            1    NaN    NaN        NaN
29            1    NaN    NaN        NaN
...         ...    ...    ...        ...
131984        1   Male  White  66.000000
131985        1   Male  White  66.000000
131986        1   Male  White  66.000000
131987        1   Male  White  66.000000
131988        1   Male  White  66.000000
131989        1   Male  White  66.000000
131990        1   Male  White  66.000000
131991        1   Male  White  66.000000
131992        1   Male  White  66.000000
131993        1   Male  White  49.400002
131994        1   Male  White  49.400002
131995        1   Male  Asian  56.099998
131996        1   Male  Asian  56.099998
131997        1   Male  Asian  56.099998
131998        1    NaN    NaN        NaN
131999        1    NaN    NaN        NaN
132000        1    NaN    NaN        NaN
132001        1    NaN    NaN        NaN
132002        1    NaN    NaN        NaN
132003        1    NaN    NaN        NaN
132004        1    NaN    NaN        NaN
132005        1    NaN    NaN        NaN
132006        1    NaN    NaN        NaN
132007        1    NaN    NaN        NaN
132008        1    NaN    NaN        NaN
132009        1    NaN    NaN        NaN
132010        1    NaN    NaN        NaN
132011        1    NaN    NaN        NaN
132012        1    NaN    NaN        NaN
132013        1    NaN    NaN        NaN

[132014 rows x 4 columns]
                       award_home_dept        ...         award_total_amount
0                                  NaN        ...                        NaN
1                                  NaN        ...                        NaN
2                                  NaN        ...                        NaN
3                                  NaN        ...                        NaN
4                                  NaN        ...                        NaN
5             Int Med-Genetic Medicine        ...                        NaN
6                                  NaN        ...                        NaN
7                                  NaN        ...                        NaN
8                                  NaN        ...                        NaN
9                                  NaN        ...                        NaN
10                                 NaN        ...                        NaN
11                                 NaN        ...                        NaN
12                                 NaN        ...                        NaN
13                                 NaN        ...                        NaN
14                                 NaN        ...                        NaN
15                                 NaN        ...                        NaN
16                                 NaN        ...                        NaN
17                                 NaN        ...                        NaN
18                                 NaN        ...                        NaN
19                                 NaN        ...                        NaN
20                                 NaN        ...                        NaN
21                                 NaN        ...                        NaN
22                                 NaN        ...                        NaN
23                                 NaN        ...                        NaN
24                                 NaN        ...                        NaN
25                                 NaN        ...                        NaN
26                                 NaN        ...                        NaN
27                                 NaN        ...                        NaN
28                                 NaN        ...                        NaN
29                                 NaN        ...                        NaN
...                                ...        ...                        ...
131984           School of Information        ...                        NaN
131985           School of Information        ...                     3631.0
131986           School of Information        ...                        NaN
131987           School of Information        ...                        NaN
131988           School of Information        ...                   303559.0
131989           School of Information        ...                   152929.0
131990           School of Information        ...                        NaN
131991           School of Information        ...                   168631.0
131992           School of Information        ...                   125000.0
131993                Flint Psychology        ...                        NaN
131994                Flint Psychology        ...                        0.0
131995            Pop Studies-Research        ...                        NaN
131996            Pop Studies-Research        ...                        NaN
131997            Pop Studies-Research        ...                        NaN
131998      Space Physics Research Lab        ...                     5582.0
131999  Physical Medicine & Rehab Dept        ...                        NaN
132000  Physical Medicine & Rehab Dept        ...                        NaN
132001  SON - Grants & Research Office        ...                        NaN
132002  DENT Periodontics and Oral Med        ...                        NaN
132003                             NaN        ...                        NaN
132004                             NaN        ...                        NaN
132005               School of Nursing        ...                        NaN
132006   CPS-National Election Studies        ...                        NaN
132007  Cell and Developmental Biology        ...                        NaN
132008  Cell and Developmental Biology        ...                        NaN
132009                 LSA Mathematics        ...                   219715.0
132010         Epidemiology Department        ...                        NaN
132011                      SON-Grants        ...                        NaN
132012                   LSA Astronomy        ...                        NaN
132013                   LSA Chemistry        ...                        NaN

[132014 rows x 5 columns]

Filtering Rows

1

Joins

                                                   EMPLID    ...     UNIQNAME
0       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
1       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
2       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
3       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
4       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
5       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
6       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
7       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
8       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
9       d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
10      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
11      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
12      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
13      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
14      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
15      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
16      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
17      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
18      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
19      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
20      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
21      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
22      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
23      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
24      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
25      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
26      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
27      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
28      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
29      d613cf396403a94490de24a13296ef239df8574bb7eb5c...    ...          NaN
...                                                   ...    ...          ...
131984  fed0efb32b55eda44ede093a90c4706a5b56826814a030...    ...          NaN
131985  fed0efb32b55eda44ede093a90c4706a5b56826814a030...    ...          NaN
131986  fed0efb32b55eda44ede093a90c4706a5b56826814a030...    ...          NaN
131987  fed0efb32b55eda44ede093a90c4706a5b56826814a030...    ...          NaN
131988  fed0efb32b55eda44ede093a90c4706a5b56826814a030...    ...          NaN
131989  fed0efb32b55eda44ede093a90c4706a5b56826814a030...    ...          NaN
131990  fed0efb32b55eda44ede093a90c4706a5b56826814a030...    ...          NaN
131991  fed0efb32b55eda44ede093a90c4706a5b56826814a030...    ...          NaN
131992  fed0efb32b55eda44ede093a90c4706a5b56826814a030...    ...          NaN
131993  5041afe77be84dc0f665cd8f6f465ec3a4884fb62de976...    ...          NaN
131994  5041afe77be84dc0f665cd8f6f465ec3a4884fb62de976...    ...          NaN
131995  53639ae376537249845b43e2e245bf0e736eb456e3d5e8...    ...          NaN
131996  53639ae376537249845b43e2e245bf0e736eb456e3d5e8...    ...          NaN
131997  53639ae376537249845b43e2e245bf0e736eb456e3d5e8...    ...          NaN
131998  b79c4e3f15612f725fc06227d9b03a4f474357dad40e4d...    ...          NaN
131999  914d1a7fef48ff17a4bd3a0f9bd44daea7e793ddb0a609...    ...          NaN
132000  914d1a7fef48ff17a4bd3a0f9bd44daea7e793ddb0a609...    ...          NaN
132001  33dedcc86f1856747d4e8c65e2e92947b12eaf4c1f98dd...    ...          NaN
132002  a1de2cf4bae27e53762a113fc71ed644993b0c81cd8d17...    ...          NaN
132003  be733af76f9966cacfdd0d54f413c0f96763980c1b744e...    ...          NaN
132004  a43f22661e41279f931bf01c05c9182c0d731827f87dc9...    ...          NaN
132005  6954711246feaff77e678101e23af85b1fb51f188e34b0...    ...          NaN
132006  330270f2ece996e542aab829f22e9133ea44e7196a134e...    ...          NaN
132007  b3de243d3578e97c27ae11c2c5f2fbfb95b22cbb630fc9...    ...          NaN
132008  b3de243d3578e97c27ae11c2c5f2fbfb95b22cbb630fc9...    ...          NaN
132009  bb62330937079fa9c5de658d3a54c67917bf863c2bf8de...    ...          NaN
132010  b2151f42b0e04da847edb4c38258502bda8efda7bcd375...    ...          NaN
132011  61e188161d01be23042abc63fe6f58cdba20d79c61b4ae...    ...          NaN
132012  3cc3cda60496aba3c3a296520d8b3d05dbec370524bd01...    ...          NaN
132013  4e0549127bdf82b396f13aa5ebdb73c94099c32af1b2c6...    ...          NaN

[132014 rows x 14 columns]
Index(['EMPLIDEMPLID', 'libuser', 'gender', 'race', 'age', 'turndown',
       'submission', 'activeawd', 'award_home_dept', 'award_current_state',
       'award_project_start_date', 'award_project_end_date',
       'award_total_amount', 'UNIQNAME', 'EMPLID'],
      dtype='object')
Index(['EMPLIDEMPLID', 'libuser', 'gender', 'race', 'age', 'turndown',
       'submission', 'activeawd', 'award_home_dept', 'award_current_state',
       'award_project_start_date', 'award_project_end_date',
       'award_total_amount', 'UNIQNAME', 'EMPLID'],
      dtype='object')
LS0tCnRpdGxlOiAiTW9kdWxlIDE6IERlYWxpbmcgd2l0aCBEYXRhIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgaGlnaGxpZ2h0OiBweWdtZW50cwogICAgdGhlbWU6IHNhbmRzdG9uZQplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCgojIyBTZXR1cAoKYGBge3Igc2V0dXB9CmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCgojIyBPYmplY3RzIGFuZCBDbGFzc2VzCgpgYGB7ciBvYmplY3RzLCBlY2hvPUZBTFNFfQp4ID0gMTozCnkgPSAnYScKeiA9IGxpc3Qob25lID0geCwgdHdvID0geSkKCngKeQp6CmBgYAoKYGBge3IgaW5zcGVjdH0Kc3RyKHopCmNsYXNzKHkpCmBgYAoKIyMgRGF0YSBTdHJ1Y3R1cmVzCgpWZWN0b3JzIGZvcm0gdGhlIGJhc2lzIG9mIFIgZGF0YSBzdHJ1Y3R1cmVzLiBUd28gbWFpbiB0eXBlcyBhcmUgYXRvbWljIGFuZCBsaXN0cwoKYGBge3IgdmVjdG9yfQpteV92ZWN0b3IgPC0gYygxLCAyLCAzKSAgICMgc3RhbmRhcmQgdmVjdG9yCmBgYAoKYGBge3IgbGlzdH0KbXlfbGlzdCA8LSBsaXN0KGEgPSAxLCBiID0gMikgICAjIGEgbmFtZWQgbGlzdApteV9saXN0CmBgYAoKIyMgRGF0YSBmcmFtZXMKCkRhdGEgZnJhbWVzIGFyZSBhIHNwZWNpYWwga2luZCBvZiBsaXN0LCBhbmQgcHJvYmFibHkgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBmb3IgZGF0YSBzY2llbmNlIHB1cnBvc2VzLgoKYGBge3IgZGF0YV9mcmFtZSwgZXZhbD1UUlVFfQpteV9kYXRhID0gZGF0YS5mcmFtZSgKICBpZCA9IDE6MywKICBuYW1lID0gYygnVmVybm9uJywgJ0FjZScsICdDb3JhJykKKQoKbXlfZGF0YQpjbGFzcyhteV9kYXRhKQpgYGAKCiMjIEltcG9ydGluZyBEYXRhCgpgYGB7ciBpbXBvcnQsIGV2YWw9VFJVRX0KZGVtb2dyYXBoaWNzID0gcmVhZC5jc3YoJ2RhdGEvZGVtb3NfYW5vbnltaXplZC5jc3YnKQppZHMgPSByZWFkLmNzdignZGF0YS9pZHNfYW5vbnltaXplZC5jc3YnKQpgYGAKCiMjIFdvcmtpbmcgd2l0aCBEYXRhYmFzZXMKCmBgYHtyIGRhdGFiYXNlcywgZXZhbD1GQUxTRX0KIyByZXF1aXJlcyBEQkkgYW5kIFJTUUxpdGUgcGFja2FnZXMKbGlicmFyeShEQkkpCmNvbiA8LSBkYkNvbm5lY3QoUlNRTGl0ZTo6U1FMaXRlKCksICI6bWVtb3J5OiIpCiMgY29uCgpjb3B5X3RvKGNvbiwgZGVtb2dyYXBoaWNzLCAnZGVtb3MnKQpgYGAKCgoKIyMgU2VsZWN0aW5nIENvbHVtbnMKCmBgYHtyIHNlbGVjdDF9CmRlbW9ncmFwaGljcyAlPiUgCiAgc2VsZWN0KGdlbmRlciwgYWdlLCBsaWJ1c2VyKQpgYGAKCgpgYGB7ciBzZWxlY3QyfQpkZW1vZ3JhcGhpY3MgJT4lIAogIHNlbGVjdCgtbGlidXNlcikKYGBgCgpgYGB7ciBzZWxlY3QzfQpkZW1vZ3JhcGhpY3MgJT4lIAogIHNlbGVjdChzdGFydHNfd2l0aCgnYXdhcmQnKSkKYGBgCgoKIyMgRmlsdGVyaW5nIFJvd3MKCmBgYHtyIGZpbHRlcn0KbXlfZmlsdGVyZWRfZGF0YSA9IGRlbW9ncmFwaGljcyAlPiUgCiAgZmlsdGVyKGFnZSA8IDQwKQoKbXlfZmlsdGVyZWRfZGF0YSA9IGRlbW9ncmFwaGljcyAlPiUgCiAgZmlsdGVyKGxpYnVzZXIgPT0gMSkKYGBgCgoKIyMgR2VuZXJhdGluZyBuZXcgZGF0YQoKYGBge3IgbXV0YXRlfQpkZW1vZ3JhcGhpY3MgPSBkZW1vZ3JhcGhpY3MgJT4lIAogIG11dGF0ZShuZXdfYWdlID0gKGFnZSAtIG1lYW4oYWdlLCBuYS5ybSA9IFQpKS9zZChhZ2UsIG5hLnJtID0gVCkpICAgCmBgYAoKIyMgUmVuYW1pbmcgY29sdW1ucwoKYGBge3IgcmVuYW1lMX0KZGVtb2dyYXBoaWNzID0gZGVtb2dyYXBoaWNzICU+JSAKICByZW5hbWUoYWdlX3N0ZCA9IG5ld19hZ2UpCmBgYAoKYGBge3IgcmVuYW1lMn0KZGVtb2dyYXBoaWNzICU+JSAKICByZW5hbWVfYWxsKHRvdXBwZXIpICU+JSAKICBjb2xuYW1lcygpCmBgYAoKIyMgTWVyZ2luZwoKYGBge3IgZXhhbXBsZV9qb2luc30KIyBzYW1lIE4gcm93cyBhcyBkZW1vcwpsZWZ0X2pvaW4oZGVtb2dyYXBoaWNzLCBpZHMpCgojIG9ubHkgfiA1MGsgcm93cwppbm5lcl9qb2luKGRlbW9ncmFwaGljcywgaWRzKSAKYGBgCgojIyBFeGVyY2lzZXMKCiMjIyBTZWxlY3RpbmcgYW5kIGZpbHRlcmluZwoKCiMjIyBHZW5lcmF0aW5nIG5ldyBkYXRhCgojIyBQeXRob24gZXhhbXBsZXMKClVzaW5nIFB5dGhvbiBmb3IgZGF0YSBzY2llbmNlIGlzIG5vdCBmYXIgcmVtb3ZlZCBmcm9tIFIKClB5dGhvbidzIG1haW4gZGF0YSBwcm9jZXNzaW5nIG1vZHVsZSBpcyBgcGFuZGFzYAoKCiMjIyBJbXBvcnQKCmBgYHtweXRob24gcHlfaW1wb3J0LCBlbmdpbmUucGF0aD0gJy9Vc2Vycy9taWNsL2FuYWNvbmRhMy9iaW4vcHl0aG9uJ30KaW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgIGFzIG5wCgpkZW1vZ3JhcGhpY3MgPSBwZC5yZWFkX2NzdignZGF0YS9kZW1vc19hbm9ueW1pemVkLmNzdicpCmlkcyA9IHBkLnJlYWRfY3N2KCdkYXRhL2lkc19hbm9ueW1pemVkLmNzdicpCgpkZW1vZ3JhcGhpY3MuaGVhZCgpICAjIHNob3cgYSBmZXcgbGluZXMKYGBgCgojIyMgU2VsZWN0aW5nIENvbHVtbnMKCmBgYHtweXRob24gcHlfc2VsZWN0fQojIHNlbGVjdCBieSBuYW1lCmRlbW9ncmFwaGljc1tbJ2FnZScsICdhd2FyZF90b3RhbF9hbW91bnQnXV0KYGBgCgoKYGBge3B5dGhvbiBweV9zZWxlY3QyfQojIHNlbGVjdCBzdWNjZXNzaXZlIGNvbHVtbnMKZGVtb2dyYXBoaWNzLmxvY1s6LCdsaWJ1c2VyJzonYWdlJ10KYGBgCgoKYGBge3B5dGhvbiBweV9zZWxlY3QzfQojIHNlbGVjdCBieSBwYXR0ZXJuCmRlbW9ncmFwaGljcy5maWx0ZXIocmVnZXg9J15hd2FyZCcpIApgYGAKCiMjIyBGaWx0ZXJpbmcgUm93cwoKYGBge3B5dGhvbiBweV9maWx0ZXJ9Cm15X2ZpbHRlcmVkX2RhdGEgPSBkZW1vZ3JhcGhpY3NbZGVtb2dyYXBoaWNzLmxpYnVzZXIgPT0gMV0KbnAubWVhbihteV9maWx0ZXJlZF9kYXRhLmxpYnVzZXIpCmBgYAoKIyMjIEpvaW5zCgpgYGB7cHl0aG9uIHB5X2xlZnRfam9pbn0KZGVtb3Nfam9pbmVkID0gcGQubWVyZ2UoZGVtb2dyYXBoaWNzLCBpZHMsIGhvdz0nbGVmdCcsIG9uPSdFTVBMSUQnKQpkZW1vc19qb2luZWQKYGBgCgpgYGB7cHl0aG9uIHB5X2xlZnRfam9pbjJ9CmRlbW9zX2pvaW5lZCA9IGRlbW9ncmFwaGljcy5qb2luKGlkcywgaG93PSdsZWZ0JywgbHN1ZmZpeD0nRU1QTElEJykKZGVtb3Nfam9pbmVkLnNoYXBlCmRlbW9zX2pvaW5lZC5jb2x1bW5zCmBgYAoKCmBgYHtweXRob24gcHlfaW5uZXJfam9pbn0KZGVtb3Nfam9pbmVkID0gZGVtb2dyYXBoaWNzLmpvaW4oaWRzLCBob3c9J2lubmVyJywgbHN1ZmZpeD0nRU1QTElEJykKCmRlbW9zX2pvaW5lZC5jb2x1bW5zCmBgYAoK